﻿/********************************************************************************
 * Copyright (C) 2020 - All Rights Reserved by xiaomutech
 * date: 2020/8/3
 * file: %filename%
 * auth: yhni lynnhua@163.com QQ:393320854
 * desc:
 ********************************************************************************/
#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
//    this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);

    m_nTimerId = startTimer(1000);
    QString strDate = QTime::currentTime().toString("hh:mm:ss");
    ui->labelCurrentTime->setText(strDate);

    connect(ui->widgetCalendar, &ShadowCalendarWidget::selectedDateChanged,
            this, &MainWindow::handleSelectedDateChanged);

    vbox = new QVBoxLayout(ui->widgetNewRecord);
    picked = QDate::currentDate();

    sqlHelper = new SQLHelper(this);
    db = sqlHelper->createConnection(dbFileName);
    loadEvents(picked,true);
}


MainWindow::~MainWindow()
{
    killTimer(m_nTimerId);
    delete ui;
    delete sqlHelper;
}

void MainWindow::timerEvent(QTimerEvent *e)
{
    if (m_nTimerId == e->timerId()) {
        QString strDate = QTime::currentTime().toString("hh:mm:ss");
        ui->labelCurrentTime->setText(strDate);
    }
}

void MainWindow::on_btnCurrendDate_clicked()
{
    ui->widgetCalendar->setCurrentDate();
}

void MainWindow::updateDatabaseStatus(const QString& eventId, int status) {
    if (sqlHelper) {
        QString updateQuery = "UPDATE tb_event SET Status = ? WHERE EventID = '?'";
        QStringList values;
        values << eventId << QString::number(status);
        sqlHelper->updateStatusById(db, eventId, status);
    }
}

void MainWindow::insertCheckBox(const QString& eventId, const QString &text, bool checked)
{
    ui->lineEdit->clear();
    QCheckBox *checkBox = new QCheckBox(text, ui->widgetNewRecord);
    checkBox->setStyleSheet("QCheckBox { color: white; font-size: 12pt; }"
                            "QCheckBox::indicator { color: white; }");
    // 连接选中状态改变的信号
    connect(checkBox, &QCheckBox::stateChanged,this, [this, checkBox, eventId](int state){
        if (state == Qt::Checked) {
            // 当复选框被选中，更新数据库状态为1
            updateDatabaseStatus(eventId, 1);
            checkBox->setStyleSheet("text-decoration: line-through; color: white; font-size: 12pt; ");
        } else {
            // 当复选框被取消选中，更新数据库状态为0
            updateDatabaseStatus(eventId, 0);
            checkBox->setStyleSheet("color: white; font-size: 12pt; ");
        }
    });
    checkBox->setChecked(checked);
    vbox->addWidget(checkBox); // 使用 vbox 添加 checkBox 到 widgetNewRecord 的布局
}

void MainWindow::on_lineEdit_returnPressed()
{
    QString text = ui->lineEdit->text().trimmed();
    if (!text.isEmpty()) {
        // 打开数据库连接
        // 创建 SQLiteHelper 对象
        QString pickedDate = picked.toString("yyyy-MM-dd");
        // 查询当前日期的事件数量
        int eventCount = sqlHelper->queryEventCountByDate(db,pickedDate);
        // 生成新的事件ID
        QString eventId = QString("%1-%2").arg(pickedDate).arg(eventCount + 1);
        // 插入新事件
        if (sqlHelper->insertEvent(db, eventId, pickedDate, text, 0)) {
            // 插入成功后的逻辑
            qDebug() << "Event added successfully!";
            insertCheckBox(eventId,text, false);
        } else {
            // 插入失败后的逻辑
            qDebug() << "Failed to add event!";
        }
    }
}

void MainWindow::loadEvents(const QDate& date, bool status)
{
    // 调用 SQLHelper 的新成员函数查询事件和状态
    QList<EventInfo> events = sqlHelper->queryEventsByDate(db, date.toString("yyyy-MM-dd"));
    // 为每个查询到的事件和状态创建一个 checkBox
    foreach (const EventInfo &eventInfo, events) {
        // 根据 status 设置 checkBox 的初始选中状态
        bool checked = (eventInfo.status == 1); // 假设状态 1 表示选中
        if(!status) checked = false;
        qDebug() << eventInfo.eventID<<eventInfo.event<<checked;
        insertCheckBox(eventInfo.eventID,eventInfo.event, checked);
    }
}

void MainWindow::handleSelectedDateChanged(const QDate& date) {
    // 处理选中的日期，例如更新UI显示选中日期
    qDebug() << "Current selected date in MainWindow:" << date.toString("yyyy-MM-dd");
    picked = date;
    // 清空当前的 checkBoxes
    while (QLayoutItem *item = vbox->takeAt(0)) {
        // 如果 item 包含一个控件，则删除这个控件
        if (QWidget *widget = item->widget()) {
            delete widget;
        }
        // 删除布局项
        delete item;
    }
    // 可以在这里添加其他逻辑，如更新状态栏、显示事件等
    loadEvents(picked,true);
}
